package framework;

import org.junit.Assert;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import webdriver.Browser;

/** Класс расширенного браузера для имплементации некоторых методов
 */
public class BrowserExtended{

	/** Конструктор
	 */
	public BrowserExtended(){
		instance  = Browser.getInstance();
		driver = instance.getDriver();
	}
	public static RemoteWebDriver getDriver() {
		return driver;
	}
	public static Browser getInstance() {
		return instance;
	}
	// поля для инициализации расширенного браузера
	public static RemoteWebDriver driver;
	public static Browser instance;

	/** Возвращает время таймаута для условия
	 * @return timeoutForCondition
	 */
	public String getTimeoutForCondition() {
		return instance.getTimeoutForCondition();
	}

	/** Возвращает время таймаута для загрузки страницы
	 * @return timeoutForPageLoad
	 */
	public String getTimeoutForPageLoad() {
		return instance.getTimeoutForPageLoad();
	}

	/** Закрывает текущее окно и переключается на предыдущее
	 * @param currentWndCount
	 */
	public void closeWindowAndSwitch() {
		final int wndCount = driver.getWindowHandles().size();
		String handle = driver.getWindowHandle();
		WebDriver wd = driver.switchTo().window(handle);
		wd.close();
		WebDriverWait wait = new WebDriverWait(driver, Long.parseLong(getTimeoutForCondition()));
		try {
			wait.until((ExpectedCondition<Boolean>) new ExpectedCondition<Boolean>() {
				public Boolean apply(final WebDriver d) {
					return d.getWindowHandles().size() < wndCount;
				}
			});
		} catch (TimeoutException e) {
			Assert.assertTrue("Предыдущее окно не закрылось", false);
		}
		selectLastWindow();
	}

	/** Переключается на последнее по счету окно браузера
	 * @param currentWndCount
	 */

	public void selectLastWindow() {
		Object[] handles = driver.getWindowHandles().toArray();
		driver.switchTo().window((String) handles[handles.length - 1]);
	}
}
